package main

import (
	"fmt"
)

//1. 无参数无返回值
func sayHello() {
  fmt.Printf("hello world\n")
}

//2. 如果连续的一系列参数的类型是一样的,前面的类型可以不写
func add(a /* int*/, b, c int) int {
  sum := a + b + c
  return sum
}

//3.1 多返回值
func calc(a, b int) (int, int) {
  sum := a + b
  sub := a - b
  return sum, sub
}

//3.2 用变量操作返回值
func calc2(a, b int) (sum int, sub int) {
  sum = a + b
  sub = a - b
  return
}

//
func calc_v1(b ...int) int {
  sum := 0
  for i := 0; i < len(b); i++ {
    sum = sum + b[i]
  }
  return sum
}

func calc_v2(a int, b ...int) int {
  sum := 0
  for i := 0; i < len(b); i++ {
    sum = sum + b[i]
  }
  sum += a
  return sum
}

func main() {
  //
  //sayHello()

  //
  //s := add(100, 200, 3000)
  //fmt.Println(s) //3300

  //
  //sum, sub := calc(100, 200)
  //fmt.Println(sum, sub) //300 -100

  //3.3 _ 表示忽略,不需要该返回值
  //sum,_ :=calc(100, 200)
  //fmt.Println(sum)

  //
  //sum := calc_v1(10, 20, 30, 40, 50)
  //fmt.Printf("sum=%d\n", sum)


  //
  sum := calc_v2(1,10,20)
  fmt.Printf("sum=%d\n", sum) //31

}
